module traveldream/prodotti

open util/integer

sig Luogo {}

sig Prezzo in Int {}

abstract sig Prodotto {
	prezzo : one Prezzo
} {
	prezzo > 0
}

abstract sig Alloggio extends Prodotto {
	luogo : one Luogo
}

abstract sig Trasporto extends Prodotto {
	provenienza : one Luogo,
	destinazione : one Luogo
} {
	provenienza != destinazione
}

abstract sig Attivita extends Prodotto {
	luogo : one Luogo
}

/* Le signature di modello sono per quanto possibile generiche
 * e si concretizzano nelle seguenti specializzazioni: */ 
sig Albergo extends Alloggio {}

sig Volo extends Trasporto {}

sig Escursione extends Attivita {}
/* Se in fututo si dovessero aggiungere al sistema altri prodotti basta aggiungere
 * delle altre estensioni qui, ad esempio: "sig Treno extends Trasporto {}" */





